sd386@font.cl.cam.ac.uk
shand@spidean.research.intel-research.net
smh22@boulderdash.cl.cam.ac.uk
+smh22@firebug.cl.cam.ac.uk
smh22@labyrinth.cl.cam.ac.uk
smh22@tempest.cl.cam.ac.uk
smh22@uridium.cl.cam.ac.uk
{
int j, n = ((mmapcmd.num-i)>PRIVCMD_MMAP_SZ)?
PRIVCMD_MMAP_SZ:(mmapcmd.num-i);
+
+
if ( copy_from_user(&msg, p, n*sizeof(privcmd_mmap_entry_t)) )
return -EFAULT;
struct vm_area_struct *vma =
find_vma( current->mm, msg[j].va );
+
if ( !vma )
return -EINVAL;
addr = m.addr;
for ( i = 0; i < m.num; i++, addr += PAGE_SIZE, p++ )
{
+
if ( get_user(mfn, p) )
return -EFAULT;
v = w;
}
+
ret = 0;
break;
batch_err:
+ printk(KERN_ALERT "XXX SMH: ERROR IN MMAPBATCH\n");
printk("batch_err ret=%d vma=%p addr=%lx num=%d arr=%p %lx-%lx\n",
ret, vma, m.addr, m.num, m.arr, vma->vm_start, vma->vm_end);
break;
pgd_t *pgd = pgd_offset_k(m2pv);
pud_t *pud = pud_offset(pgd, m2pv);
pmd_t *pmd = pmd_offset(pud, m2pv);
- unsigned long m2p_start_mfn = pfn_to_mfn(pmd_val(*pmd) >> PAGE_SHIFT);
+ unsigned long m2p_start_mfn = (*(unsigned long *)pmd) >> PAGE_SHIFT;
ret = put_user(m2p_start_mfn, (unsigned long *)data) ? -EFAULT: 0;
}
break;